package com.sistemagestion.clientes.view;

import java.util.ArrayList;
import java.util.List;

import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.Toast;

import com.sistemagestion.R;
import com.sistemagestion.BO.ClienteBO;
import com.sistemagestion.BO.LocalidadBO;
import com.sistemagestion.BO.RazonSocialBO;
import com.sistemagestion.Entities.Cliente;
import com.sistemagestion.Entities.Localidad;
import com.sistemagestion.Entities.RazonSocial;
import com.sistemagestion.Utils.Constantes;
import com.sistemagestion.Utils.DialogConfirmacion;
import com.sistemagestion.Utils.DialogConfirmacion.IDialogListenerButton;

public class ClienteEditActivity extends FragmentActivity implements
		IDialogListenerButton {

	// BO Components
	private ClienteBO clientebo = new ClienteBO();
	private LocalidadBO localidadbo = new LocalidadBO();
	private RazonSocialBO razonsocialbo = new RazonSocialBO();

	// View Componetns
	EditText txtApellido;
	EditText txtNombre;
	EditText txtDni;
	EditText txtDireccion;
	EditText txtTelefono;
	Button btnAceptar;
	Button btnCancelar;
	Spinner spnLocalidad;
	Spinner spnRazonSocial;

	// ModelComponents
	Cliente _Cliente;
	List<Localidad> listaLocalidad = new ArrayList<Localidad>();
	List<RazonSocial> listaRazonSocial = new ArrayList<RazonSocial>();

	public Constantes.Operations operation = Constantes.Operations.ADD;

	@Override
	protected void onCreate(Bundle savedInstanceState) {

		getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		super.onCreate(savedInstanceState);
		setContentView(R.layout.lyt_cliente_edit);
		Bundle b = getIntent().getExtras();
		operation = (Constantes.Operations) b.getSerializable("OPERATION");
		_Cliente = (Cliente) b.getSerializable("CLIENTE");
		initView();
		if (operation == Constantes.Operations.EDIT)
			MostrarRegistro();
	}

	private void initView() {
		spnLocalidad = (Spinner) findViewById(R.id.spnLocalidad);
		spnRazonSocial = (Spinner) findViewById(R.id.spnRazonSocial);
		txtApellido = (EditText) findViewById(R.id.edtApellido);
		txtNombre = (EditText) findViewById(R.id.edtNombre);
		txtDni = (EditText) findViewById(R.id.edtDNI);
		txtDireccion = (EditText) findViewById(R.id.edtDireccion);
		txtTelefono = (EditText) findViewById(R.id.txtTelefono);
		btnAceptar = (Button) findViewById(R.id.btnAceptar);
		btnCancelar = (Button) findViewById(R.id.btnCancelar);
		btnCancelar = (Button) findViewById(R.id.btnCancelar);
		spnLocalidad.setAdapter(FillSpnLocalidad());
		spnRazonSocial.setAdapter(FillSpnRazonSocial());

		btnAceptar.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View arg0) {
				if (ValidarCampos() == true){
				DialogConfirmacion dialogo = new DialogConfirmacion();
				dialogo.show(getSupportFragmentManager(), "editar");
				}
				else
				{
					ValidarCampos();
				}
			}
		});

		btnCancelar.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View arg0) {
				finish();
			}
		});
	}

	public void Guardar() {

		if (operation == Constantes.Operations.ADD)
			_Cliente = new Cliente();
		_Cliente.setApellido(txtApellido.getText().toString());
		_Cliente.setNombre(txtNombre.getText().toString());
		_Cliente.setDNI(txtDni.getText().toString());
		_Cliente.setDireccion(txtDireccion.getText().toString());
		_Cliente.setTelefono(txtTelefono.getText().toString());
		_Cliente.setIdLocalidad(((Localidad) spnLocalidad.getSelectedItem())
				.getIdLocalidad());
		_Cliente.setIdRazonSocial(((RazonSocial) spnRazonSocial
				.getSelectedItem()).getIdRazonSocial());

		if (clientebo.saveCliente(_Cliente) > 0) {
			LimpiarPantalla();
			Toast.makeText(this, "Operacion exitosa", Toast.LENGTH_LONG).show();
		} else
			Toast.makeText(this, "Ha ocurrido un error!", Toast.LENGTH_LONG)
					.show();

	}

	private void MostrarRegistro() {
		if (_Cliente == null)
			return;
		txtApellido.setText(_Cliente.getApellido());
		txtNombre.setText(_Cliente.getNombre());
		txtDni.setText(_Cliente.getDNI());
		txtDireccion.setText(_Cliente.getDireccion());
		txtTelefono.setText(_Cliente.getTelefono());
		int posLoc = listaLocalidad.indexOf(localidadbo.getById(_Cliente
				.getIdLocalidad()));
		int posRaz = listaRazonSocial.indexOf(razonsocialbo.getById(_Cliente
				.getIdRazonSocial()));
		spnLocalidad.setSelection(posLoc);
		spnRazonSocial.setSelection(posRaz);
	}

	private Boolean ValidarCampos() {
		Boolean val = true;
		if ((txtDni.getText().length() < 7) || (txtDni.getText().length() > 9)){
			Toast.makeText(this, "El DNI ingresado es incorrecto", Toast.LENGTH_LONG).show();
			txtDni.requestFocus();
			val = false;
			return val;
		}
		if (txtNombre.getText().length() == 0){
			Toast.makeText(this, "EL Nombre es obligatorio", Toast.LENGTH_LONG).show();
			txtNombre.requestFocus();
			val = false;
			return val;
		}
		if (txtApellido.getText().length() == 0){
			Toast.makeText(this, "EL Apellido es obligatorio", Toast.LENGTH_LONG).show();
			txtApellido.requestFocus();
			val = false;
			return val;
		}
		
		return val;
	}

	private void LimpiarPantalla() {
		txtApellido.setText("");
		txtNombre.setText("");
		txtDni.setText("");
		txtDireccion.setText("");
		txtTelefono.setText("");
	}

	private ArrayAdapter<Localidad> FillSpnLocalidad() {
		listaLocalidad = localidadbo.getAll();
		ArrayAdapter<Localidad> adapter = new ArrayAdapter<Localidad>(this,
				android.R.layout.simple_gallery_item, listaLocalidad);
		return adapter;
	}

	private ArrayAdapter<RazonSocial> FillSpnRazonSocial() {

		listaRazonSocial = razonsocialbo.getAll();
		ArrayAdapter<RazonSocial> adapter = new ArrayAdapter<RazonSocial>(this,
				android.R.layout.simple_gallery_item, listaRazonSocial);
		return adapter;
	}

	@Override
	public void onPositiveButton() {
		// TODO Auto-generated method stub
		Guardar();
		finish();
	}

	@Override
	public void onCancelButton() {
		// TODO Auto-generated method stub

	}

}
